<?php

/**
 * winbinder 패키지 
 * 
 * 
 * @package php.ui.winbinder
 */


/**
 * WBListView
 *
 * @package php.ui.winbinder
 */
class WBListView extends WBControl { 
	private $_header = array();

	public function __construct($options = array()) { 
		$options['class'] = ListView;

		parent::__construct($options);
	}

	protected function initCreate() { 
		parent::initCreate();

		$style = $this->getOption('style');
		
		if (isset($this->sort) && $this->getOption('sort'))	 $style |= WBC_SORT;
		if (isset($this->single) && $this->getOption('single'))	 $style |= WBC_SINGLE;
		
		$this->setOption('style', $style);
	}

	protected function initEvent() { 
		parent::initEvent();

		$this->setEvent('headerSelected', 'onHeaderSelected');
		$this->setEvent('deleteRow', 'onDeleteRow');
		$this->setEvent('insertRow', 'onInsertRow');
	}

	// 객체 초기화 
	protected function initComponent() { 
		parent::initComponent();	

		if (isset($this->header))	$this->setHeader($this->getOption('header'));
		if (isset($this->items))	$this->setItems($this->getOption('items'));
		if (isset($this->line))		$this->setLine($this->getOption('line'));
		if (isset($this->checkbox))	$this->setCheckBox($this->getOption('checkbox'));
	}

	/**
	 * 라인 설정 
	 *
	 * @param bool $isLine line 설정 여부 
	 * @return bool
	 */
	public function setLine($isLine = false) { 
		return $this->setStyle(WBC_LINES, $isLine);
	}

	/**
	 * 헤더 설정 
	 *
	 * @param array $headerList 헤더 리스트 
	 */
	public function setHeader($headerList = array()) { 
		$this->_header = $headerList;

		$this->setText($this->_header);
	}

	/**
	 * 헤더 리스트에 추가 하기 
	 *
	 * @param string $header 헤더  
	 */
	public function addHeader($header) { 
		$this->_header[] = $header;

		$this->setHeader($this->_header);
	}

	/**
	 * 데이타 설정 
	 *
	 * <code>
	 * 
	 * // two dimension array 
	 * $listview->setItems(array(array(1,2,3), array(4,5,6), ...));
	 * 
	 * </code>
	 *
	 * @param array $items 데이타 설정 
	 */
	public function setItems($items = array()) { 

		// clear cell 
		$this->initItems();

		// set data 
		$this->createItems($items);
	}

	/** 
	 * WBListView clear 
	 *
	 * 객체 안의 데이타 지우기 
	 * 
	 */
	public function init() { 
		// Clears all column titles
		$this->initHeader();

		// Clears all cells
		$this->initItems();
	}

	/**
	 * item(data) 초기화 
	 *
	 * 
	 */
	public function initItems() { 
		return $this->deleteItems();
	}

	/**
	 * 헤더 초기화
	 *
	 */
	public function initHeader() { 
		return $this->setText(array());
	}

	/**
	 * 길이 구하기 
	 *
	 * 
	 */ 
	public function length() { 
		return $this->getItemCount();
	}

	/**
	 * Row 추가 하기 
	 *
	 * @param array $item 추가될 row 
	 *
	 */
	public function addRow($item) { 
		$this->createItems(array($item));
	}

	/**
	 * Row 삭제 하기 
	 *
	 * @param int $index 삭제될 index 지정 
	 */ 
	public function deleteRow($index) { 
		$this->deleteItems($index);
	}

	/**
	 * column 값 가져오기 
	 *
	 * @param int $row 검색할 row 
	 * @param int $column 검색할 column 
	 * @return string|int
	 */
	public function getColumn($row, $column) { 
		return $this->getText($row, $column);
	}

	/**
	 * row 값 가져오기 
	 *
	 * @param int $row 검색할 row 
	 * @return array 결과 배열로 리턴 
	 */
	public function getRow($row) { 
		return $this->getText($row);
	}

	/**
	 * 전체 배열 가지고 오기 
	 *
	 * @return array 전체 데이타 배열 
	 */
	public function getItems() { 
		return $this->getText();
	}

	/**
	 * column값 설정하기 
	 *
	 * @param int $row 검색할 row 
	 * @param int $column 검색할 column
	 * @param string|int $text 설정할 값  
	 */
	public function setColumn($row, $column, $text) { 
		$this->setText($text, $row, $column);
	}

	/**
	 * row 값 설정하기 
	 *
	 * 
	 */
	public function updateRow($index, $row ) { 
		$this->setText($row, $index);
	}

	/**
	 * 특정 index에 row 삽입하기 
	 *
	 *
	 */ 
	public function insertRow($index, $row) { 
		for ($i = $this->length()-1; $i >= $index; $i--) { 
			$this->updateRow($i + 1, $this->getRow($i));
		}

		$this->updateRow($index, $row);
	}

	/**
	 * header 사이즈 조정 
	 *
	 *
	 */
	public function setColumnSize($size = array()) { 
		$this->setSize($size);
	}
	
	/**
	 * 체크박스 설정 
	 *
	 *
	 */
	public function setCheckBox($isCheckBox = false) { 
		$this->setStyle(WBC_CHECKBOXES, $isCheckBox);
	}

	/**
	 * 현재 선택되어진 row index
	 *
	 * @return array selected index list 
	 */
	public function getSelectedIndex() {
		$arr = $this->getSelected(); 
		return $arr[0];
	}

	/**
	 * 체크 되어 있는 리스트 얻어오기 
	 *
	 *
	 */
	public function getCheckedList() { 
		return (array)$this->getValue();
	}

	/**
	 * 체크 상태 얻어오기 
	 *
	 *
	 */
	public function isChecked($index) {
		$arr = $this->getCheckedList(); 
		
		return in_array($index, $arr);
	}

	/**
	 * row의 체크상태 설정하기 
	 *
	 *
	 */
	public function setChecked($index, $isChecked = true) { 
		return wbtemp_set_listview_item_checked($this->getInstance(), $index, $isChecked);
	}

	/**
	 * 이벤트 실행 정의 
	 *
	 */
	public function fire($eo) {
		parent::fire($eo);

		// header selected event 
		if ($eo->isHeaderSelected()) { $this->fireEvent('headerSelected', $eo); return; }
	}

}

?>